import 'package:json_annotation/json_annotation.dart';

/* 服务端数据格式
HEART_BEAT_MSG(1, "心跳消息"),
USER_ID_MSG(2, "用户id消息"),
CHAT_ROOM_OPEN_MSG(3, "聊天室公屏消息"),
VOICE_AUDIT(4, "语音流检测"),
MSG_REPLY(5, "消息回执"),   // 用于统计全服广播消息触达率
LOGOUT(6, "用户登出"),
REVERSE_CTRL(999, "逆向控制"),
 */

enum HBMessageType {
  heartBeatMsg(1, '心跳消息'),
  userIdMsg(2, '用户id消息'),
  chatRoomOpenMsg(3, '聊天室公屏消息'),
  voiceAudit(4, "语音流检测"),
  msgReply(5, "消息回执"), // 用于统计全服广播消息触达率
  logout(6, "用户登出"),
  reverseCall(999, '逆向控制'),

  /// ==== 以上消息和服务端定义的一样
  /// ==== 以下消息为客户端自定义的消息 消息从 201 开始
  userLogin(201, '用户进入房间'),
  gift(202, '用户赠送礼物消息'),

  msgEnd(10086, '自定义消息结束');

  final int value;
  final String name;

  const HBMessageType(this.value, this.name);

  // 值到枚举的映射表
  static final Map<int, HBMessageType> _byValue = {
    for (final e in HBMessageType.values) e.value: e,
  };

  // 通过整数值获取枚举
  static HBMessageType? fromValue(int value) => _byValue[value];
}

// 自定义 JsonConverter
class HBMessageTypeConverter extends JsonConverter<HBMessageType?, int?> {
  const HBMessageTypeConverter();

  @override
  HBMessageType? fromJson(int? json) {
    if (json == null) {
      return null;
    }
    return HBMessageType.fromValue(json);
  }

  @override
  int? toJson(HBMessageType? object) {
    return object?.value;
  }
}
